// API配置文件
class ApiConfig {
  constructor() {
    // 从webpack注入的环境变量获取配置
    this.config = {
      host: process.env.REACT_APP_API_HOST || 'localhost',
      port: process.env.REACT_APP_API_PORT || '8000',
      protocol: process.env.REACT_APP_API_PROTOCOL || 'http',
    };
    
    // 运行时环境检测
    this.isDevelopment = process.env.NODE_ENV === 'development';
    this.isProduction = process.env.NODE_ENV === 'production';
    
    // URL参数覆盖（仅开发模式，用于调试）
    if (this.isDevelopment) {
      this.applyUrlOverrides();
    }
    
    this.logConfiguration();
  }

  // 应用URL参数覆盖（开发模式调试用）
  applyUrlOverrides() {
    const params = new URLSearchParams(window.location.search);
    
    if (params.has('api_host')) {
      this.config.host = params.get('api_host');
      console.log('🔧 URL覆盖API主机:', this.config.host);
    }
    if (params.has('api_port')) {
      this.config.port = params.get('api_port');
      console.log('🔧 URL覆盖API端口:', this.config.port);
    }
    if (params.has('api_protocol')) {
      this.config.protocol = params.get('api_protocol');
      console.log('🔧 URL覆盖API协议:', this.config.protocol);
    }
  }

  // 记录配置信息
  logConfiguration() {
    if (this.isDevelopment) {
      console.group('🔧 API配置信息');
      console.log('环境模式:', this.isDevelopment ? '开发' : '生产');
      console.log('API主机:', this.config.host);
      console.log('API端口:', this.config.port);
      console.log('API协议:', this.config.protocol);
      console.log('完整API地址:', this.getBaseURL());
      console.log('使用代理:', this.shouldUseProxy() ? '是' : '否');
      console.groupEnd();
    }
  }

  // 判断是否应该使用webpack代理
  shouldUseProxy() {
    // 开发模式且主机是localhost时使用代理
    return this.isDevelopment && (this.config.host === 'localhost' || this.config.host === '127.0.0.1');
  }

  // 获取完整的API基础URL
  getBaseURL() {
    // 开发模式下，如果使用代理，返回空字符串（相对路径）
    if (this.shouldUseProxy()) {
      return '';
    }
    
    // 其他情况返回完整URL
    return `${this.config.protocol}://${this.config.host}:${this.config.port}`;
  }

  // 获取API端点URL
  getApiURL(endpoint = '') {
    const baseURL = this.getBaseURL();
    
    // 确保endpoint以/开头
    if (endpoint && !endpoint.startsWith('/')) {
      endpoint = '/' + endpoint;
    }
    
    return baseURL + endpoint;
  }

  // 获取认证API的URL
  getAuthURL(endpoint = '') {
    return this.getApiURL('/api/auth' + endpoint);
  }

  // 获取管理员API的URL
  getAdminURL(endpoint = '') {
    return this.getApiURL('/api/admin' + endpoint);
  }

  // 获取数据处理API的URL
  getDataProcessingURL(endpoint = '') {
    return this.getApiURL('/api/data-processing' + endpoint);
  }

  // 获取当前配置（只读）
  getConfig() {
    return { 
      ...this.config,
      isDevelopment: this.isDevelopment,
      isProduction: this.isProduction,
      baseURL: this.getBaseURL(),
      useProxy: this.shouldUseProxy(),
    };
  }

  // 健康检查API
  async healthCheck() {
    try {
      const response = await fetch(this.getApiURL('/health'), {
        method: 'GET',
        headers: {
          'Content-Type': 'application/json',
        },
      });
      
      if (response.ok) {
        const data = await response.json();
        return { success: true, data };
      } else {
        return { success: false, error: `HTTP ${response.status}` };
      }
    } catch (error) {
      return { success: false, error: error.message };
    }
  }
}

// 创建全局实例
const apiConfig = new ApiConfig();

export default apiConfig; 